package sqlGo

import (
	"database/sql"
	"errors"
	"time"

	"fmt"
	//导入数据库驱动
	_ "github.com/go-sql-driver/mysql"
)

//	使用方式：
//		import git.oschina.net/a2go/sqlGo
//		dbURL :="username:password@tcp(ip:port)/schema?charset=utf8"
//		err := InitDb(dbURL)
//

var connMap = make(map[string]*sql.DB)
var conn *sql.DB

//ConnectDb 注册数据库
// 参数说明：
//	dbURL:数据库连接地址
//	dbType:数据库类型，暂支持MYSQL
//	maxOpenConn(最大连接数),
// 	maxIdleConn（最大空闲连接数）,
// 	maxConnLiftTime（边接存活时间）
//	dbName：数据库别名
func ConnectDb(args ...interface{}) error {
	dbURL := ""
	dbType := "mysql"
	maxActive := int64(200)
	maxIdle := int64(100)
	maxLifeTime := int64(-1)
	dbName := "default"
	if len(args) == 0 {
		return errors.New("缺少数据库连接参数！")
	}
	for index, arg := range args {
		if index == 0 {
			dbURL = String(arg)
		} else if index == 1 {
			dbType = String(arg)
		} else if index == 2 {
			maxActive = ToInt(arg)
		} else if index == 3 {
			maxIdle = ToInt(arg)
		} else if index == 4 {
			maxLifeTime = ToInt(arg)
		} else if index == 5 {
			dbName = String(arg)
		} else {
			break
		}
	}
	if dbURL == "" {
		return errors.New("数据库地址不能为空！")
	}
	sqlDB, err := sql.Open(dbType, dbURL)
	if err != nil {
		return err
	}
	sqlDB.SetMaxOpenConns(int(maxActive))
	sqlDB.SetMaxIdleConns(int(maxIdle))
	sqlDB.SetConnMaxLifetime(time.Duration(maxLifeTime) * time.Second)
	err = sqlDB.Ping()
	if err != nil {
		return err
	}
	//数据库连接创建成功，存放对象
	conn = sqlDB
	connMap[dbName] = sqlDB
	return nil
}

//BuildConnURL 拼接连接数据库的URL
// 参数说明：
//	user:数据库用户名
//	password:数据库用户密码
//	host :数据库地址
// 	port ： 数据库服务器端口
// 	schema:数据库实例名称
func BuildConnURL(user, password, host string, port int, schema string) (string, error) {
	if "" == user {
		return "", errors.New("数据库用户名不能为空！")
	}
	if "" == host {
		host = "127.0.0.1"
	}
	if 0 >= port {
		port = 3306
	}
	if "" == schema {
		schema = "mysql"
	}

	return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8", user, password, host, port, schema), nil
}
